object xiayige {
  def main(args: Array[String]): Unit = {
    val cat = new Cat

    cat.name = "⼩⽩"
    cat.age = 10
    cat.color = "⽩⾊"
    printf("\n⼩猫的信息如下: %s %d %s", cat.name, cat.age, cat.color)
  }
}

class Cat {

  var name: String = "" //给初始值
  var age: Int = _ // _ 表示给age ⼀个默认的值 ，如果Int 默认就是0
  var color: String = _ // _ 给 color 默认值，如果String ,默认是就是null
}

/**
 * 说明
 * 1. cat.name = "⼩⽩" 其实不是直接访问属性，⽽是 cat.name_$eq("⼩⽩")
 * 2. cat.name 等价于 cat.name()
 */
/**
 * 定义⼀个类Cat
 * ⼀个class Cat 对应的字节码⽂件只有⼀个 Cat.class ,默认是public
 */
/**
 * 定义/声明三个属性
 * 说明
 * 1. 当我们声明了 var name :String时, 在底层对应 private name
 * 2. 同时会⽣成 两个public⽅法 name() <=类似=> getter public name_$eq
 * () => setter
 */